#include <stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<errno.h>
int main()
{
  pid_t id=fork();
  if(id==0)
  {
    int cnt=3;
    while(1)
    {
      //子进程
      sleep(3);
      printf("我是一个子进程，pid:%d,ppid:%d\n",getpid(),getppid());
      sleep(1);
      cnt--;
      int a=10;
      //a/=10;
    }
    exit(10);
  }
  while(1)
  {
    int status = 0;
    pid_t rid= waitpid(id,&status,WNOHANG);
    if(rid > 0)
    {

      printf("wait sucess ,rid :%d,exit code:%d ,exit signal:%d\n",rid,WEXITSTATUS(status),status&0x7F);
      break;
    }
    else if(rid == 0)
    {
      printf("本轮调用结束，子进程没有退出\n");
      sleep(1);
    }
    else 
    {
      printf("等待失败\n");
    }
  }
//  if(id>0)
//  {
//    //父进程
//    int status = 0;
//    pid_t rid = waitpid(id,&status,0); 
//    if(rid > 0)
//    {
//      //printf("wait sucess ,rid :%d,exit code:%d ,exit signal:%d\n",rid,(status>>8)&0xFF,status&0x7F);
//      if(WIFEXITED(status))
//      printf("wait sucess ,rid :%d,exit code:%d ,exit signal:%d\n",rid,WEXITSTATUS(status),status&0x7F);
//      else 
//        printf("子进程退出异常\n");
//    }
//    else 
//    {
//      printf("wait failed %d: %s\n",errno,strerror(errno));
//    }
//  }
  return 0;
}
